package com.itxiuyixiu.entity.mapper;

import com.itxiuyixiu.entity.model.Activity;
import com.itxiuyixiu.entity.model.ActivityView;
import com.itxiuyixiu.entity.model.Organization;
import com.itxiuyixiu.entity.model.Project;

import java.util.List;
import java.util.Optional;

/**
 * @author 黄磊
 * @date 2020/5/2
 */
public interface ActivityReaderMapper {
    /**
     * 根据活动id查找
     *
     * @param activityId 活动id
     * @return 活动信息
     */
    Optional<Activity> findActivityByActivityId(Integer activityId);

    /**
     * 根据项目id查找
     *
     * @param projectId 项目id
     * @return 活动信息
     */
    List<Activity> findAllActivityByProjectId(Integer projectId);

    /**
     * 根据志愿者组织id查找
     *
     * @param organizationId 志愿者组织id
     * @return 活动信息
     */
    List<Activity> findAllActivityByOrganizationId(Integer organizationId);

    /**
     * 根据管理员id查找
     *
     * @param adminId 管理员id
     * @return 活动信息
     */
    List<Activity> findAllActivityByAdminId(Integer adminId);

    /**
     * 根据管理员的用户名查找
     *
     * @param username 用户名
     * @return 活动信息
     */
    List<Activity> findAllActivityByAdminUsername(String username);
    /**
     * 查询所有的活动
     *
     * @return 所有的活动信息
     */
    List<Activity> findAllActivity();

    /**
     * 视图
     * 根据活动id查找
     *
     * @param activityId 活动id
     * @return 活动信息
     */
    Optional<ActivityView> findActivityViewByActivityId(Integer activityId);

    /**
     * 视图
     * 根据项目id查找
     *
     * @param projectId 项目id
     * @return 活动信息
     */
    List<ActivityView> findAllActivityViewByProjectId(Integer projectId);

    /**
     * 视图
     * 根据志愿者组织id查找
     *
     * @param organizationId 志愿者组织id
     * @return 活动信息
     */
    List<ActivityView> findAllActivityViewByOrganizationId(Integer organizationId);

    /**
     * 查询所有的活动
     *
     * @return 所有的活动信息
     */
    List<ActivityView> findAllActivityView();

    /**
     * 查询特定活动信息及其所属项目、志愿者组织信息
     *
     * @param activityId 活动id
     * @return 所有的活动信息
     */
    Optional<Activity> findActivityWithProjectAndOrganizationByActivityId(Integer activityId);
}
